{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 1.          1.26        0.98333333]\n",
      " [ 1.026       1.51756667  0.96971111]\n",
      " [ 1.07515667  1.77972176  0.95942238]\n",
      " ...\n",
      " [ 2.93127998 -3.65144226 29.79740063]\n",
      " [ 2.27300776 -3.66761468 28.89576928]\n",
      " [ 1.67894551 -3.65129944 28.04185027]]\n",
      "(99999, 3)\n",
      "test error: \n",
      "16.754246974763976\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1cfa9267d90>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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Kcr0999/04MHDxzCLFmyxDR5tbDZbPTff/8REVGjRo2cvuvMzEzas2ePWD4TExOpc+fO9Ntvv3lFXk9x69YteuGFF2jt2rVey/PkyZO0Zs0amdsbb7xBAKhXr15O48fHx9O4cePowoULiv5r1qyh3Llz06JFi0yRV+Do0aOG6oQrV66I4bOysnTn8+KLLzrkI/zu2LGjUbEpOTlZjJ+amiq6z5kzh7766isiIjp79iwVK1aMJkyY4DS9RYsWmVY3StsIe7cyZcooxsnMzKTY2FjNuq1BgwYer79TU1Np2rRpdO7cOd1x1qxZQ1u2bJG5KT0DV+rtTz75hABQw4YNnYa9efMm/e9//6MVK1boSrt06dKaz/PUqVOq/kr35wnefPNNXflERUW5LM+NGzc04164cIHCw8Np4cKFoltMTIxb97927Vo6cOCAS3GbNm3qUt47d+4kAPT555+7lK8rVKtWTSbrpUuXqEGDBrR06VK30xbSfeGFFzTDlS1b1tSyKvQtVq5cSURER44c0Uy/WLFiLuV/8eJF+v7772X1u5DOtm3bNOMK4RYuXCj+/91334n+VquVzp49S2fPniWr1epUltTUVPr555/p1q1bhu7BHzCiT3lVM0hKSqInnniCpk+fTg8ePKDcuXPT8uXLRf/Tp08TANq7d6/uNLOb8njt2jUCQMHBwbLwQrhffvlFMb358+eLHR0lhPj9+/cnokcdpjt37rgsf6FChQx9xA8fPjScx/3796lbt25ix33r1q3UsmVLOnXqlBhGkKFTp06Kafz444+qcm7fvp2eeOIJlxWyhIQEunHjhvg7NjZWMa8OHTo4fVaC/+XLlyk6OpoAUI0aNWR5CWHsBxY8wbBhw8RKXY/y+N577xEAeuutt4iI6KOPPjJcyc+ZM4cWL17stuxK7N+/X1VZGjt2LLVp04bS09Md/Lp37256x+7evXs0evRoWTmWIuT3zz//OLjpkaNTp04OA1JK6Qtp3bt3jz788EM6fvy4Q9j09HRZgytw4cIFGjBggExBXbt2raGBGunATmZmptP7EujYsaOpyqO0w3vv3j2HNC9evKiosKrhLeVRLf3XX3+dAND48eNV09WrPMbHx9Pdu3ddkn3UqFGGnsOdO3fE8NJOmP39bt26lYoWLUq///67IXnKly+vW54ePXoYkt2Z8njo0CFTlceM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",
      "text/plain": [
       "<Figure size 1100x150 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 最原始的混沌序列\n",
    "import numpy as np\n",
    "from pyESN import ESN\n",
    "from matplotlib import pyplot as plt\n",
    "import scipy.io as sio\n",
    "%matplotlib inline\n",
    "\n",
    "# 导入数据\n",
    "# data = np.load('./data/hundun.npy') #  http://minds.jacobs-university.de/mantas/code\n",
    "data=np.load('./data/hundun/output.npy')\n",
    "print(data)\n",
    "print(data.shape)\n",
    "\n",
    "esn = ESN(n_inputs = 3,\n",
    "          n_outputs = 3,\n",
    "          n_reservoir = 3500,\n",
    "          spectral_radius = 1.2,\n",
    "          sparsity=0.2,\n",
    "          noise = 0.005,\n",
    "          random_state=23)\n",
    "\n",
    "trainlen = 97499\n",
    "future = 2500\n",
    "\n",
    "pred_training = esn.fit(np.ones((trainlen,3)),data[:trainlen])\n",
    "prediction = esn.predict(np.ones((future,3)))\n",
    "print(\"test error: \\n\"+str(np.sqrt(np.mean((prediction.flatten() - data[trainlen:trainlen+future].flatten())**2))))\n",
    "\n",
    "plt.figure(figsize=(11,1.5))\n",
    "\n",
    "# 展示训练和预测部分\n",
    "# plt.plot(range(0,trainlen+future),data[0:trainlen+future],'k',label=\"target system\")\n",
    "# plt.plot(range(trainlen,trainlen+future),prediction,'r', label=\"free running ESN\")\n",
    "\n",
    "# 只展示预测部分\n",
    "plt.plot(range(trainlen,trainlen+future),data[trainlen:trainlen+future],'k',label=\"target system\")\n",
    "plt.plot(range(trainlen,trainlen+future),prediction,'r', label=\"free running ESN\")\n",
    "\n",
    "lo,hi = plt.ylim()\n",
    "plt.plot([trainlen,trainlen],[lo+np.spacing(1),hi-np.spacing(1)],'k:')\n",
    "plt.legend(loc=(0.61,1.1),fontsize='x-small')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 1.          1.26        0.98333333]\n",
      " [ 1.026       1.51756667  0.96971111]\n",
      " [ 1.07515667  1.77972176  0.95942238]\n",
      " ...\n",
      " [ 1.93127998 -3.65144226 29.79740063]\n",
      " [ 2.27300776 -3.66761468 28.89576928]\n",
      " [ 1.67894551 -3.65129944 28.04185027]]\n",
      "(99999, 3)\n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[18], line 25\u001b[0m\n\u001b[0;32m     22\u001b[0m trainlen \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m99999\u001b[39m \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m2500\u001b[39m\n\u001b[0;32m     23\u001b[0m future \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m2500\u001b[39m\n\u001b[1;32m---> 25\u001b[0m pred_training \u001b[38;5;241m=\u001b[39m \u001b[43mesn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mones\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrainlen\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m[\u001b[49m\u001b[43m:\u001b[49m\u001b[43mtrainlen\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     26\u001b[0m prediction \u001b[38;5;241m=\u001b[39m esn\u001b[38;5;241m.\u001b[39mpredict(np\u001b[38;5;241m.\u001b[39mones((future,\u001b[38;5;241m3\u001b[39m)))\n\u001b[0;32m     27\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtest error: \u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m+\u001b[39m\u001b[38;5;28mstr\u001b[39m(np\u001b[38;5;241m.\u001b[39msqrt(np\u001b[38;5;241m.\u001b[39mmean((prediction\u001b[38;5;241m.\u001b[39mflatten() \u001b[38;5;241m-\u001b[39m data[trainlen:trainlen\u001b[38;5;241m+\u001b[39mfuture]\u001b[38;5;241m.\u001b[39mflatten())\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m))))\n",
      "File \u001b[1;32me:\\论文研究\\Reservoir_Computing\\pyESN\\pyESN.py:180\u001b[0m, in \u001b[0;36mESN.fit\u001b[1;34m(self, inputs, outputs, inspect)\u001b[0m\n\u001b[0;32m    178\u001b[0m states \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mzeros((inputs\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mn_reservoir))\n\u001b[0;32m    179\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m n \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m1\u001b[39m, inputs\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m]):\n\u001b[1;32m--> 180\u001b[0m     states[n, :] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_update\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstates\u001b[49m\u001b[43m[\u001b[49m\u001b[43mn\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minputs_scaled\u001b[49m\u001b[43m[\u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    181\u001b[0m \u001b[43m                                \u001b[49m\u001b[43mteachers_scaled\u001b[49m\u001b[43m[\u001b[49m\u001b[43mn\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    182\u001b[0m \u001b[38;5;66;03m# learn the weights, i.e. find the linear combination of collected\u001b[39;00m\n\u001b[0;32m    183\u001b[0m \u001b[38;5;66;03m# network states that is closest to the target output\u001b[39;00m\n\u001b[0;32m    184\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msilent:\n",
      "File \u001b[1;32me:\\论文研究\\Reservoir_Computing\\pyESN\\pyESN.py:118\u001b[0m, in \u001b[0;36mESN._update\u001b[1;34m(self, state, input_pattern, output_pattern)\u001b[0m\n\u001b[0;32m    112\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"performs one update step.\u001b[39;00m\n\u001b[0;32m    113\u001b[0m \n\u001b[0;32m    114\u001b[0m \u001b[38;5;124;03mi.e., computes the next network state by applying the recurrent weights\u001b[39;00m\n\u001b[0;32m    115\u001b[0m \u001b[38;5;124;03mto the last state & and feeding in the current input and output patterns\u001b[39;00m\n\u001b[0;32m    116\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m    117\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mteacher_forcing:\n\u001b[1;32m--> 118\u001b[0m     preactivation \u001b[38;5;241m=\u001b[39m (\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdot\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mW\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstate\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    119\u001b[0m                      \u001b[38;5;241m+\u001b[39m np\u001b[38;5;241m.\u001b[39mdot(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mW_in, input_pattern)\n\u001b[0;32m    120\u001b[0m                      \u001b[38;5;241m+\u001b[39m np\u001b[38;5;241m.\u001b[39mdot(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mW_feedb, output_pattern))\n\u001b[0;32m    121\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m    122\u001b[0m     preactivation \u001b[38;5;241m=\u001b[39m (np\u001b[38;5;241m.\u001b[39mdot(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mW, state)\n\u001b[0;32m    123\u001b[0m                      \u001b[38;5;241m+\u001b[39m np\u001b[38;5;241m.\u001b[39mdot(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mW_in, input_pattern))\n",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "# 后2500个加了信号\n",
    "import numpy as np\n",
    "from pyESN import ESN\n",
    "from matplotlib import pyplot as plt\n",
    "import scipy.io as sio\n",
    "%matplotlib inline\n",
    "\n",
    "# 导入数据\n",
    "# data = np.load('./data/hundun.npy') #  http://minds.jacobs-university.de/mantas/code\n",
    "data=np.load('./data/message/output.npy')\n",
    "print(data)\n",
    "print(data.shape)\n",
    "\n",
    "esn = ESN(n_inputs = 3,\n",
    "          n_outputs = 3,\n",
    "          n_reservoir = 3500,\n",
    "          spectral_radius = 1.2,\n",
    "          sparsity=0.2,\n",
    "          noise = 0.005,\n",
    "          random_state=23)\n",
    "\n",
    "trainlen = 99999 - 2500\n",
    "future = 2500\n",
    "\n",
    "pred_training = esn.fit(np.ones((trainlen,3)),data[:trainlen])\n",
    "prediction = esn.predict(np.ones((future,3)))\n",
    "print(\"test error: \\n\"+str(np.sqrt(np.mean((prediction.flatten() - data[trainlen:trainlen+future].flatten())**2))))\n",
    "\n",
    "plt.figure(figsize=(11,1.5))\n",
    "\n",
    "# 只展示训练和预测部分\n",
    "# plt.plot(range(0,trainlen+future),data[0:trainlen+future],'k',label=\"target system\")\n",
    "# plt.plot(range(trainlen,trainlen+future),prediction,'r', label=\"free running ESN\")\n",
    "\n",
    "# 只展示预测部分\n",
    "plt.plot(range(trainlen,trainlen+future),data[trainlen:trainlen+future],'k',label=\"target system\")\n",
    "plt.plot(range(trainlen,trainlen+future),prediction,'r', label=\"free running ESN\")\n",
    "\n",
    "lo,hi = plt.ylim()\n",
    "plt.plot([trainlen,trainlen],[lo+np.spacing(1),hi-np.spacing(1)],'k:')\n",
    "plt.legend(loc=(0.61,1.1),fontsize='x-small')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
